package com.moyoutian.leetcode;

import java.util.Stack;

/**
 * 32. 最长有效括号
 * <p>
 * 给你一个只包含 '('和 ')'的字符串，找出最长有效（格式正确且连续）括号子串的长度。
 * <p>
 * <p>
 * <p>
 * 示例 1：
 * <p>
 * 输入：s = "(()"
 * 输出：2
 * 解释：最长有效括号子串是 "()"
 * 示例 2：
 * <p>
 * 输入：s = ")()())"
 * 输出：4
 * 解释：最长有效括号子串是 "()()"
 * 示例 3：
 * <p>
 * 输入：s = ""
 * 输出：0
 * <p>
 * <p>
 * 提示：
 * <p>
 * 0 <= s.length <= 3 * 104
 * s[i] 为 '(' 或 ')'
 */
public class Demo32 {

    public static void main(String[] args) {
        String s = "()(()";
        System.out.println(longestValidParentheses(s));
    }


    public static int longestValidParentheses(String s) {

        //无效输入
        if (s == null || s.length() <= 1) {
            return 0;
        }

        char[] chars = s.toCharArray();
        Stack<Character> stack = new Stack<>();
        int count = 0;
        for (char aChar : chars) {
            if (aChar == ')') {
                if (!stack.isEmpty() && stack.peek().equals('(')) {
                    stack.pop();
                    count += 2;
                }
            }else {
                stack.add(aChar);
            }
        }
        return count;
    }


}
